/**
 * 权限重置工具
 * 
 * 当出现权限问题时，可以使用这个工具重置权限
 * 在权限更新后，可能出现缓存不一致问题，这个工具可以清除缓存并重新加载权限
 */
import auth from './auth';
import { store } from '../store';
import { setRights } from '../store/features/userSlice';
import { STORAGE_KEYS } from '../constants/common';

/**
 * 重置用户权限，强制刷新
 * 解决因缓存不一致导致的权限问题
 * 
 * @returns 重置结果，包含状态和消息
 */
export const resetUserPermissions = (): { success: boolean; message: string } => {
  try {
    // 1. 获取当前用户信息
    const userInfo = auth.getUserInfo();
    if (!userInfo || !userInfo.role) {
      return {
        success: false,
        message: '未找到用户信息或角色数据，请重新登录'
      };
    }

    // 2. 获取最新权限
    const { rights } = userInfo.role;
    if (!rights || !Array.isArray(rights) || rights.length === 0) {
      return {
        success: false,
        message: '未找到有效的权限数据'
      };
    }

    // 3. 更新本地存储
    localStorage.setItem(STORAGE_KEYS.USER_RIGHTS, JSON.stringify(rights));
    
    // 4. 更新Redux状态
    store.dispatch(setRights(rights));
    
    // 5. 更新Auth实例状态
    auth.setUserRights(rights);
    
    console.log('[权限重置] 权限已重置', rights);
    
    return {
      success: true,
      message: `权限已重置，共加载 ${rights.length} 项权限`
    };
  } catch (error) {
    console.error('[权限重置] 重置失败:', error);
    return {
      success: false,
      message: `权限重置失败: ${error instanceof Error ? error.message : '未知错误'}`
    };
  }
};

/**
 * 重置权限并刷新页面
 * 在严重的权限问题下使用，完全重新加载
 * 
 * @returns 操作结果消息
 */
export const resetAndReload = (): string => {
  try {
    // 1. 清除权限缓存
    localStorage.removeItem(STORAGE_KEYS.USER_RIGHTS);
    
    // 2. 刷新页面
    setTimeout(() => {
      window.location.reload();
    }, 1000);
    
    return '正在重置权限并刷新页面...';
  } catch (error) {
    console.error('[权限重置] 重置并刷新失败:', error);
    return `操作失败: ${error instanceof Error ? error.message : '未知错误'}`;
  }
};

export default {
  resetUserPermissions,
  resetAndReload
}; 